<?php namespace Common\Model;
use Hdphp\Model\Model;
//分类表模型
class Cate extends Model{
	//指定模型操作的表
	protected $table = 'category';
	//自动验证要通过create方法来触发
	protected $validate = array(
		//1.字段名 
		//2.规则 
		//3.提示信息 
		//4.验证条件（3是必须验证）
		//5.验证时机（3是插入和修改都要验证）
        array('cname','required','分类名称不能为空',3,3),
        array('cname','maxlen:20','分类名称不得超过20个字符',3,3),
		array('ctitle','required','分类标题不能为空',3,3),
		
    ); 
	
	//自定义添加方法
	public function store(){
		//模型自带方法，可以让$this->data有值
		//create触发自动验证
		if($this->create()){
			//模型自带方法，add添加的时候需要从$this->data获得值
			//先create执行再add添加
			//添加方法会返回主键自增id
			$this->add();
			return true;
		}
		return false;
	}
	
	public function edit(){
	    if($this->create()){
		    	//修改(不用写where条件的原因是因为edit.php页面有一个隐藏域)
			$this->save();
			return true;
	    }
		return false;
	}
	
	//获得所有的分类，但是排除自己和自己的子集
	public function getNoMy($cid){
		//(1)获得自己和自己的子集的cid
		$data = $this->get();
		$cids = $this->getSon($data,$cid);
		//压入自己
		$cids[] = $cid;
		//(2)排除
		//SELECT * FROM category WHERE cid NOT IN(12,15,17);
		$result = $this->where("cid NOT IN(" . implode(',', $cids) . ")")->get();
		$result = Data::tree($result,'cname');
		return $result;
	}
	
	//获得所有子集的cid
	public function getSon($data,$cid){
		$temp = array();
		foreach ($data as $v) {
			//如果找到自己的子集
			if($v['pid'] == $cid){
				//把子集cid压入到数组
				$temp[] = $v['cid'];
				//再次传入，再次寻找子集
				$temp = array_merge($temp,$this->getSon($data, $v['cid']));
			}
		}
		return $temp;
	}
	
	public function del($cid){
		//1.判断分类下面是否有文章，如果用不能直接删除
		$arcModel = new \Admin\Model\Arc;
		$arcData = $arcModel->where("category_cid={$cid}")->find();
		if($arcData){
			//压入到错误属性，将来就可以在控制器用$this->model->getError()方法
			$this->error = '请先删除该分类下面的文章';
			return false;
		}
		//2.删除之后上移一级
//		cid    cname    pid
//		 12     娱乐       0
//		 15    小娱乐      12(要删除的数据)
//		 17   小小娱乐    15（要上移的数据）
//		 18   小小娱乐2    15（要上移的数据）
		//(1)获得要删除分类的pid
		//pluck 拿指定的字段
		$pid = $this->where("cid={$cid}")->pluck('pid');
		//(2)找到要删除分类的所有的子集，然后改变pid
		$this->where("pid={$cid}")->save(array('pid'=>$pid));
		
		//3.最后删除当前分类
		$this->where(array('cid'=>$cid))->delete();
		return true;
	}
	
	
	
	
}





 ?>